// required:true               必输字段
// remote:"remote-valid.jsp"   使用ajax方法调用remote-valid.jsp验证输入值
// email:true                  必须输入正确格式的电子邮件
// url:true                    必须输入正确格式的网址
// date:true                   必须输入正确格式的日期，日期校验ie6出错，慎用
// number:true                 必须输入合法的数字(负数，小数)
// digits:true                 必须输入整数
// creditcard:true             必须输入合法的信用卡号
// equalTo:"#password"        输入值必须和#password相同
// accept:                    输入拥有合法后缀名的字符串（上传文件的后缀）
// maxlength:5                输入长度最多是5的字符串(汉字算一个字符)
// minlength:10               输入长度最小是10的字符串(汉字算一个字符)
// rangelength:[5,10]         输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符)
// range:[5,10]               输入值必须介于 5 和 10 之间
// max:5                      输入值不能大于5
// min:10                     输入值不能小于10

// 自封装校验方法
var that = this
export let validate = {
	state: true,
	errInfo: '',
	setState: function(_state, _errInfo) {
		this.state = _state;
		if (!this.state) {
			this.errInfo = _errInfo
			throw "校验失败:" + _errInfo;
		}
	},

	/**
	 校验手机号
	 **/
	phone: function(text) {
		let regPhone = /^0?1[3|4|5|6|7|8|9][0-9]\d{8}$/;
		return regPhone.test(text);
	},
	/**
	 校验邮箱
	 **/
	email: function(text) {
		let regEmail = new RegExp(
			"^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$"); //正则表达式
		return regEmail.test(text);
	},
	/**
	 * 必填
	 * @param {参数} text
	 */
	required: function(text) {
		if (text == undefined || text == null || text == "") {
			return false;
		}
		return true;
	},
	/**
	 * 校验长度
	 * @param {校验文本} text
	 * @param {最小长度} minLength
	 * @param {最大长度} maxLength
	 */
	maxin: function(text, minLength, maxLength) {
		if (text.length < minLength || text.length > maxLength) {
			return false;
		}
		return true;
	},
	/**
	 * 校验长度
	 * @param {校验文本} text
	 * @param {最大长度} maxLength
	 */
	maxLength: function(text, maxLength) {
		if (text.length > maxLength) {
			return false;
		}
		return true;
	},
	/**
	 * 校验最小长度
	 * @param {校验文本} text
	 * @param {最小长度} minLength
	 */
	minLength: function(text, minLength) {
		if (text.length < minLength) {
			return false;
		}
		return true;
	},
	/**
	 * 全是数字
	 * @param {校验文本} text
	 */
	num: function(text) {
		if (text == null || text == undefined) {
			return true;
		}
		let regNum = /^[0-9][0-9]*$/;
		return regNum.test(text);
	},
	date: function(str) {
		if (str == null || str == undefined) {
			return true;
		}
		let regDate = /^(\d{4})-(\d{2})-(\d{2})$/;
		return regDate.test(str);
	},
	dateTime: function(str) {
		if (str == null || str == undefined) {
			return true;
		}
		let reDateTime =
			/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
		return reDateTime.test(str);
	},
	/**
	 金额校验
	 **/
	money: function(text) {
		if (text == null || text == undefined || text == '') {
			return true;
		}
		let regMoney = /^\d+\.?\d{0,2}$/;
		return regMoney.test(text);
	},
	/**
	 身份证校验
	 **/
	idCard: function(num) {
		if (num == null || num == undefined || num == '') {
			return true;
		}
		num = num.toUpperCase();
		//身份证号码校验正确性

		var city = {
			11: "北京",
			12: "天津",
			13: "河北",
			14: "山西",
			15: "内蒙古",
			21: "辽宁",
			22: "吉林",
			23: "黑龙江 ",
			31: "上海",
			32: "江苏",
			33: "浙江",
			34: "安徽",
			35: "福建",
			36: "江西",
			37: "山东",
			41: "河南",
			42: "湖北 ",
			43: "湖南",
			44: "广东",
			45: "广西",
			46: "海南",
			50: "重庆",
			51: "四川",
			52: "贵州",
			53: "云南",
			54: "西藏 ",
			61: "陕西",
			62: "甘肃",
			63: "青海",
			64: "宁夏",
			65: "新疆",
			71: "台湾",
			81: "香港",
			82: "澳门",
			91: "国外 "
		};
		var tip = ""
		var pass = true
		if (!/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(num)) {
			tip = "身份证号格式错误"
			pass = false;
		} else if (!city[num.substr(0, 2)]) {
			tip = "地址编码错误"
			pass = false
		} else {
			// 18位身份证需要验证最后一位校验位
			if (num.length === 18) {
				num = num.split('')
				// ∑(ai×Wi)(mod 11)
				// 加权因子
				var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
				// 校验位
				var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
				var sum = 0
				var ai = 0
				var wi = 0
				for (var i = 0; i < 17; i++) {
					ai = num[i]
					wi = factor[i]
					sum += ai * wi
				}
				var last = parity[sum % 11];
				if (parity[sum % 11] != num[17]) {
					tip = "校验位错误"
					pass = false
				}
			}
		}
		if (!pass) {
			return false;
		}
		return true;
		// if (!that.$u.test.idCard(num)) {
		// 	return false;
		// }

	}

};
